﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SIA.HwAccess;

namespace SIA.Allarms
{
    public delegate void AllarmEvent(IAllarm allarm);

    public interface IAllarm
    {        
        string Nome { get; }
        string Gruppo { get; }
        string Commento { get; }
        IHwSignal Signal { get; }
        Nullable<DateTime> DataOraON { get; }
        Nullable<DateTime> DataOraOFF { get; }
        Nullable<DateTime> DataOraACK { get; }

        /// <summary>Quando l'allarme diventa Attivo</summary>
        event AllarmEvent RiseONAllarm;
        /// <summary>Quando l'allarme si spegne</summary>
        event AllarmEvent RiseOFFAllarm;
        /// <summary>Quando l'allarme è riconosciuto</summary>
        event AllarmEvent RiseACKAllarm;
        /// <summary>Quando l'allarme si è spento e ho avuto l'ACK</summary>
        event AllarmEvent RiseIsArchiviableAllarm;
        
        /// <summary>è archiviabile quando ho la data di ON di OFF e di ACK</summary>
        Boolean isArchiviable { get; }
        /// <summary>è attivo quando le condizioni di allarme sono soddisfatte</summary>
        Boolean isActive { get; }
        
        /// <summary>invio del segnale ACK all'allarme</summary>
        void sendACK();
        /// <summary>Reset stato allarme</summary>
        void clean();
        /// <summary>Clona l'allarme</summary>
        /// <returns></returns>
        IAllarm clone();
    }
}
